package 剑指专题.其他;


/*
 * Author：江松
 * Date：2023/4/4 9:36
 *
 *
 和为S的连续正数序列
 1，枚举O(n^2)
 2，滑动窗口O(n)
 维护窗口，计算区间和，如果小了就扩大，大了就缩小窗口，相等就输出

 */

import java.util.ArrayList;

public class Main9 {

    public ArrayList<ArrayList<Integer> > FindContinuousSequence(int sum) {
        ArrayList<ArrayList<Integer>>res=new ArrayList<>();
        int l=1,r=2;
        while(l<r){
            int t=(r+l)*(r-l+1)/2;
            System.out.println(t);
            if(t<sum){
                r++;
            }else if(t>sum){
                l++;
            }else{
                ArrayList<Integer>tmp=new ArrayList<>();
                for(int i=l;i<=r;++i){
                    tmp.add(i);
                }
                res.add(tmp);
                //移动左区间防止死循环
                l++;
            }
        }
        return res;
    }

    /*
    public ArrayList<ArrayList<Integer> > FindContinuousSequence(int sum) {
        ArrayList<ArrayList<Integer>>res=new ArrayList<>();
        if(sum==0)return res;
        for(int i=1;i<=sum/2;++i){
            int t=0;
            ArrayList<Integer>tmp=new ArrayList<>();
            for(int j=i;j<sum;++j){
                t+=j;
                tmp.add(j);
                if(t==sum){
                    res.add(tmp);
                    break;
                }
                if(t>sum)break;
            }
        }
        return res;
    }
    */
}
